package inaction

fun foo(int: Int) {
    print(int)
}

/**
    不管是⽤val还是fun，如果是等号加花括号的语法，那么构建的
    就是⼀个Lambda表达式，Lambda的参数在花括号内部声明。所以，
    如果左侧是fun，那么就是Lambda表达式函数体，也必须通过（）或
    invoke来调⽤Lambda，如：
    val foo = { x: Int, y: Int -> x + y } // foo.invoke(1, 2)或foo(1, 2)
    fun foo(x: Int) = { y: Int -> x + y } // foo(1).invoke(2)或foo(1)(2)
 */

// 其实是个lambda表达式 通过invoker()或者 ()调用
fun foo2(int: Int): () -> Unit = {
    print(int)
}

fun main() {
    listOf(1,2,3,4).forEach {
        foo(it)
    }

    listOf(1,2,3,4).forEach {
        foo2(it).invoke()
    }
    listOf(1,2,3,4).forEach {
        foo2(it)()
    }
}